package org.example.top40;

public class main05 {
    //K个一组反转链表
    //输入：head = [1,2,3,4,5], k = 2
    //输出：[2,1,4,3,5]
    //参数：dummy  pre start end next、
    //for循环end必须!=null 然后在 执行next end==null break
    //各参数到位后 反转 连接 赋值pre end 因为这两个在外面
    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);
        ListNode node4 = new ListNode(4);
        ListNode node5 = new ListNode(5);
        head.next=node2;
        node2.next=node3;
        node3.next=node4;
        node4.next=node5;
        int k=3;
        ListNode dummy = new ListNode(-1);
        dummy.next=head;
        ListNode pre=dummy;
        ListNode end=dummy;
        while(end.next!=null){
            for (int i = 0; i < k&&end!=null; i++) {
                end=end.next;
            }
            if(end==null) break;
            ListNode start=pre.next;
            ListNode next=end.next;
            end.next=null;
            pre.next=reverse(start);
            start.next=next;
            pre=start;
            end=pre;
        }
        System.out.println(node2.next.val);
    }

    private static ListNode reverse(ListNode start) {
         ListNode temp=null;
         ListNode pre=null;
         ListNode cur=start;
         while(cur!=null){
             temp=cur.next;
             cur.next=pre;
             pre=cur;
             cur=temp;
         }
         return pre;
    }



/*    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);
        ListNode node4 = new ListNode(4);
        ListNode node5 = new ListNode(5);
        head.next=node2;
        node2.next=node3;
        node3.next=node4;
        node4.next=node5;
        int k=3;
        ListNode dummy = new ListNode(-1);
        dummy.next=head;
        ListNode pre=dummy;
        ListNode end=dummy;
        while (end.next!=null){
            for (int i = 0; i < k&&end!=null; i++) {
                end=end.next;
            }
            if(end==null){
                break;
            }
            ListNode start=pre.next;
            ListNode next=end.next;
            end.next=null;
            pre.next=reverse(start);
            start.next=next;
            pre=start;
            end=pre;
        }
        System.out.println(dummy.next.val);

    }
    private static ListNode reverse(ListNode head){
        ListNode pre=null;
        ListNode cur=head;
        ListNode next=null;
        while(cur!=null){
            next=cur.next;
            cur.next=pre;
            pre=cur;
            cur=next;
        }
        return pre;
    }*/
}
